perm filename GUNLO.SAI[SYS,HE]6 blob
sn#060871 filedate 1973-08-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00014 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 GUNLO - the driver program
C00005 00003 _ global storage
C00007 00004 _ external procedures
C00009 00005 _ initialize program and variables for outer level
C00011 00006 _ outer-level dynamic storage allocation
C00014 00007 _ initialization and program (command) loop of BLOCK3.
C00016 00008 _ command decoding loop
C00019 00009 _ sub-command decoding - DO, MARK, UNMARK, PLOT
C00021 00010 _ more sub-command decoding - EDIT, KILL, PRINT
C00023 00011 _ more sub-command decoding - SET
C00025 00012 _ more sub-command decoding - CALL
C00027 00013 _ more sub-command decoding - SHOW, NO, SAVE
C00031 00014 _ end of sub-command decoding - INPUT
C00033 ENDMK
C⊗;
COMMENT GUNLO - the driver program;
BEGIN "BLOCK0"
REQUIRE "LINE[SYS,HE]" LOAD_MODULE,
"LINVER[SYS,HE]" LOAD_MODULE,
"SCENE[SYS,HE]" LOAD_MODULE,
"FORSER[SYS,HE]" LOAD_MODULE,
"SAISER[SYS,HE]" LOAD_MODULE,
"SAIDIS[SYS,HE]" LOAD_MODULE,
"PROT[SYS,HE]" LOAD_MODULE,
"SAVRES[SYS,HE]" LOAD_MODULE,
"MAPS1[SYS,HE]" LOAD_MODULE,
"MAPS2[SYS,HE]" LOAD_MODULE,
"GUNFAI[SYS,HE]" LOAD_MODULE;
DEFINE QFOP="FORWARD PROCEDURE",
QRI="REFERENCE INTEGER",
QEP="EXTERNAL SIMPLE PROCEDURE",
QENP="EXTERNAL PROCEDURE",
QEIP="EXTERNAL SIMPLE INTEGER PROCEDURE",
QERP="EXTERNAL SIMPLE REAL PROCEDURE",
QS="STRING",
QESP="EXTERNAL SIMPLE STRING PROCEDURE",
QRA="REAL ARRAY",
QIA="INTEGER ARRAY",
QR="REAL",
QI="INTEGER",
CL="'15&'12",
QRR="REFERENCE REAL",
_="COMMENT",
QUNFIN="IF BRCHAR='12 THEN GO COMND ELSE GO",
QUEST="OUTCHR(""?"")",
QRETURN="BEGIN UNTELL; RETURN END",
LOOP(I,J,K,L)="FOR I←J STEP L UNTIL K DO",
QERR="IF ERR THEN BEGIN ERR←0; GO COM2 END",
QFTREV="IF FTREV=1 THEN ""←"" ELSE ""→""",
NUMI="CVD(QREAD)",
SAFEX="SAFE";
_ global storage;
LABEL BL1;
EXTERNAL BOOLEAN OVERLAY;
INTERNAL STRING H,COMSTR,NAME,MFILE,COMSAV,LIEXT,EDEXT,PREXT;
INTERNAL REAL RDEP,RMEDA,SHRINK,RDDP,RDNP,RMSD,RMLG,RWIC,RMLE,RCDI,RMALS,
RMRLS,RDUM,RMSAF,RELLF,RMAP,IRX,IRY,DSCX,DSCY,ISCX,ISCY;
INTERNAL INTEGER IDUM,IA,IB,IC,ID,IE,WHERE,BRCHAR,NGRF,NPAR,NOV,
NLPT,CVLIN,IWHAT,NOEPL,NOEPM,NOEPA,NOL,IFREEL,IFREEV,
MAXNOL,MSAFA,NOBAL,MAXNOV,LDATE,ILLL,ILFL,LNCRE1,LNCRE2,MODE,
SCALE,SIZE,LOCB,LOCT,ORIGX,ORIGY,WIND,DHOLD,IAEDG,MCHAN,MTRACE,
MODIF,FULREC,ERR,PLTOT,NPRO,PFFREE,PLFTOT,MXNPRO,MAXPLT,DISLAS,
DISFUS,PLT,NODIS,MAXPFT,PFTOT,PCFTOT,NOLS,EDLIN,FTREV,SCF,
MAXSCF,PFREE,MAXPLS,MAXPVS,MAPTRC,PFTKEY,MEOF,X,Y,DRX,DRY,DFORCE,
CFILES,NOUT,III;
SAFEX INTERNAL INTEGER ARRAY DICH,DION,DISP,DISPS,DADR,DBRSI[0:15],MCHN[1:10];
SAFEX INTERNAL STRING ARRAY CMSTRS[0:9],CMSAV[1:10];
INTEGER EDGMIN, LINMIN;
_ external procedures ;
QEIP DPYPARS;
QEP TYPLOC(QI I,J);
QEP DPYSET(QIA I);
QEIP LINFIT;
QEP INITIA;
QEP TELL(QS S);
QEP UNTELL;
QEIP QSET(QRI I);
QESP QREAD;
QEP SETPAR;
QEP COMST;
QENP SORTED;
QEP EDSAVE;
QEP EDREST;
QEP LISAVE;
QEP LIREST;
QEP PRSAVE;
QEP PRREST;
QEP REGREF(QI I);
QENP XREFC(QI I);
QEP TRANSUP;
QEP UNXREF;
QEP PRECAL;
QEP CALC;
QEP FILESP(QI I);
QEP UPPDAT;
QEP LINED;
QEP RELOPT;
QEIP BITS(QI I,J,K);
QESP EXPL(QI I,J; QS S);
QEIP LNFEAT(QI I);
QEIP COFEAT(QI I,J,K,L);
QEIP FINDFT(QI I);
QEP PARSE;
QEP CREPRO;
QEP SHUFFL;
QEP FTEX;
QERP QRSET(QRR R);
QEIP DISX(QR X);
QEIP DISY(QR Y);
QEIP LFDIF(QI I,J,K,L);
QEIP MAPCONV(QS CODES);
QEP OUTLINES;
QEP K_ZERO;
QEP K_OUT;
QEP SUMINT(QRR A,B,C,D; QRI E);
QEP EDGPRT;
QEP LININT(QRR T,U,V,W,X,Y,Z);
QEP LNINTA(QRI LVR, LVI; QRR XV,YV; QRI LC, LV, LI);
QEP PROINT(QRI PR);
_ initialize program and variables for outer level;
STDBRK(3);
SETFORMAT(0,2);
SETBREAK(13,'12&'40&"*?:⊗;",'15,"INS");
SETBREAK(11,'40,NULL,"XRN");
SETBREAK(12,".",NULL,"INS");
SETBREAK(2,".[]"&'12,'15,"INS");
ORIGX←163;
ORIGY←165;
SCALE←750;
SIZE←2;
LNCRE1←LNCRE2←WHERE←LDATE←PFFREE←PFREE←1;
IWHAT←CVLIN←WIND←CFILES←MAXPLS←MAXPVS←MODE←DFORCE←DHOLD←0;
MTRACE←PLT←NODIS←PLTOT←PLFTOT←PCFTOT←PFTOT←NPRO←SCF←0;
NPAR←28;
NOEPM←50;
NAME←"Z00";
OVERLAY←TRUE;
MSAFA←30; RMSAF←0.5;
NOUT←NGRF←NLPT←"A";
RMEDA←90.; SHRINK←0.5;
RDDP←1.5; RDNP←0.45;
RMSD←0.3; RMLG←0.;
RWIC←3.5; RMLE←15.;
RCDI←5.; RELLF←0.18;
RMALS←5.; RMRLS←0.3;
ILLL←2; ILFL←3;
RDEP←0.5;
RMAP←12.;
MXNPRO←15;
MFILE←COMSTR←COMSAV←NULL;
LIEXT←EDEXT←PREXT←".TEM";
IRX←150.; IRY←115.;
DRX←215; DRY←150;
DSCX←DSCY←2.5;
ISCX←ISCY←0.4;
LINMIN ← 50;
EDGMIN ← 200;
LOOP(IA,1,14,1) BEGIN DISP[IA]←DION[IA]←0; DICH[IA]←1 END;
DISP[1]←DISP[2]←DISP[4]←DISP[5]←DISP[14]←1;
CMSTRS[0]←"INPUT*PROT*PROTO.GUN[SYS,HE]*";
CMSTRS[1]←"H*SET*DISRPT*0*0*SCALE*5*5*LNCRE*1*1*CVLIN*1*"&
"CALL*LINFIT*UNMARK*LINES*KILL*FRAME*EDGES*D*";
CMSTRS[2]←"H*CALL*PARSE*NULL*SET*LNCRE*2000*2999*D";
_ outer-level dynamic storage allocation;
_ * * Prototype data-structure. * * *;
BL1: MAXPFT←4*(MAXPLT←12*MXNPRO);
BEGIN "BLOCK1"
LABEL BL2;
SAFEX INTERNAL STRING ARRAY PNAME[1:MXNPRO];
SAFEX INTERNAL INTEGER ARRAY PLINES,PVERTS,PPTRL[1:MXNPRO],
PFLST,PFPRO,PFEAT[1:MAXPFT],
PFPTR[0:MAXPFT],PLINE,PLINE2,PLINEF[1:MAXPLT];
PROINT(PLINEF[1]);
IF WHERE≠1 THEN PRREST;
_ * * * Edge-storage arrays. * * * * *;
BL2: NOEPL←(NOEPA MAX EDGMIN)+NOEPM;
BEGIN "BLOCK2"
LABEL BL3;
SAFEX INTERNAL REAL ARRAY EAX,EAY,EBX,EBY[1:NOEPL];
SAFEX INTERNAL INTEGER ARRAY LE[1:NOEPL];
SUMINT(EAX[1],EAY[1],EBX[1],EBY[1],LE[1]);
IF WHERE≠1 THEN EDREST;
_ * * * Line data-structure. Display-buffer. * * * * *;
BL3: NOBAL ← NOBAL MAX LINMIN;
MAXSCF←2*(MAXNOV←2*(MAXNOL←NOBAL+NOBAL*RMSAF+MSAFA));
DISLAS←NOEPL+NOEPL%10+4*MAXNOV+280;
BEGIN "BLOCK3"
SAFEX INTERNAL INTEGER ARRAY DISBUF[1:DISLAS+2],LEDG1,LEDG2,LCREDE,
LFEAT[1:MAXNOL],LVERSI,LVERCO,LVER,LINK[1:MAXNOV],
CFEAT[1:MAXSCF];
SAFEX INTERNAL REAL ARRAY XVCOR,YVCOR,SVANG,XLCOR,YLCOR[1:MAXNOV],
CXL,CYL,CCL,RLEN,ANGARG[1:MAXNOL];
LABEL COMND,COM1,COM2,MARK,UNMARK,CALL1,SHOW,KILL,SETT,PRINT,CALL,
CPA,SAV,INP,INP1,PLOT,DOIT,EDIT,DD,NO,NO1,UPLIN,COM3;
LININT(CXL[1],CYL[1],CCL[1],ANGARG[1],RLEN[1],XLCOR[1],YLCOR[1]);
LNINTA(LVERCO[1],LVERSI[1],XVCOR[1],YVCOR[1],LCREDE[1],LVER[1],
LINK[1]);
III←-1;
START_CODE DEFINE TTY="'51000000000"; TTY 6,III; END;
III ← IF III<0 THEN LOCATION(DISBUF[1])-1 ELSE 0;
_ initialization and program (command) loop of BLOCK3.;
IF WHERE≠1 THEN BEGIN UNTELL; LIREST END;
_ initialize display routines;
DPYSET(DISBUF);
DISFUS←DPYPARS-1;
RELOPT;
OVERLAY←TRUE;
DADR[1]←4;
DBRSI[1]←'4046;
DADR[2]←14;
DBRSI[2]←'4046;
DADR[3]←IA←55+NOEPL+NOEPL%10;
DBRSI[3]←'1046;
DADR[4]←IA←IA+210;
DBRSI[4]←'4046;
DADR[5]←IA←IA+MAXNOV+5;
DBRSI[5]←'1046;
DADR[6]←IA←IA+MAXNOV+5;
DBRSI[6]←'1046;
DADR[7]←IA+2*MAXNOV+5; _ Last pog. is a dummy (for jump address);
INITIA;
TRANSUP;
NODIS←0;
_ dispatch when returning from array expansion-contraction;
CASE WHERE OF BEGIN
;
"1-normal value" ;
"2-LINEFIT" GO CALL1;
"3-NOEDGES" GO NO1;
"4-CONTRACT" GO COM3;
"5-INSERT" BEGIN LINED; GO COM2 END;
"6-SPLITL" BEGIN LINED; GO COM2 END;
"7-NOLINES" GO NO1;
"8-LIREST" GO INP1;
;;
"11-EDREST" GO INP1;
;;;;
"16-PRO-LNSRT" BEGIN CREPRO; GO COM2 END;
"17-PRREST" GO INP1;
"18-PRO-NPRO" BEGIN CREPRO; GO COM2 END;
"19-PRO-MXPLT" BEGIN CREPRO; GO COM2 END;
"20-PARSE" GO CPA;
END;
_ command decoding loop;
COMND: IF ¬MODE THEN
BEGIN
OUTSTR(CL&"*");
H←TTYINL(13,BRCHAR)
END ELSE H←QREAD;
COM1: IF EQU(H,"DO") THEN GO DOIT;
IF EQU(H,"H") THEN BEGIN DHOLD←1; GO COM2 END;
IF EQU(H,"D") THEN BEGIN DHOLD←0; UPPDAT; GO COM2 END;
IF EQU(H,"DD") THEN GO DD;
IF EQU(H,"MARK") THEN GO MARK;
IF EQU(H,"UNMARK") THEN GO UNMARK;
IF EQU(H,"EDIT") THEN GO EDIT;
IF EQU(H,"SET") THEN GO SETT;
IF EQU(H,"MOVE") THEN
BEGIN
IRX←IRX-ISCX*NUMI;
IRY←IRY-ISCY*NUMI;
TRANSUP;
GO COM2
END;
IF EQU(H,"CALL") THEN GO CALL;
IF EQU(H,"SHOW") THEN GO SHOW;
IF EQU(H,"KILL") THEN GO KILL;
IF EQU(H,"PRINT") THEN GO PRINT;
IF EQU(H,"PLOT") THEN GO PLOT;
IF EQU(H,"SAVE") THEN GO SAV;
IF EQU(H,"NO") THEN GO NO;
IF EQU(H,"UPDIS") THEN
BEGIN DFORCE←1;DICH[0]←NUMI;UPPDAT;DFORCE←0;GO COM2 END;
IF EQU(H,"INPUT") THEN GO INP;
IF EQU(H,"BLANK") THEN LOOP(IA,1,35,1) OUTSTR(CL);
IF EQU(H,"CLEAR") THEN K_ZERO;
IF EQU(H,"CLOSE") THEN K_OUT;
COM2: IF BRCHAR≠'12 THEN BEGIN H←QREAD; WHERE←1; GO COM1 END;
GO COMND;
_ sub-command decoding - DO, MARK, UNMARK, PLOT;
DOIT: IF EQU(H←QREAD,"FILE") THEN
BEGIN
OPEN(MCHN[CFILES+1]←GETCHAN,"DSK",0,2,0,900,BRCHAR,MEOF);
LOOKUP(MCHN[CFILES+1],MFILE←QREAD,IA);
IF IA THEN BEGIN OUTSTR(" WHAT FILE?"); GO COMND END;
CMSAV[CFILES←CFILES+1]←COMSTR;
COMSTR←NULL;
END ELSE IF EQU(H,"COM") THEN
COMSTR←CMSTRS[NUMI]&COMSTR
ELSE BEGIN QUEST; GO COMND END;
MODE←1;
GO COMND;
DD: GO COMND; _ A breakpoint here is a convenient way to get into RAID;
MARK: H←QREAD;
IF EQU(H,"EDGES") THEN DISP[3]←1 ELSE
IF EQU(H,"VERTICES") THEN DISP[6]←1 ELSE
IF EQU(H,"LINES") THEN DISP[5]←1 ELSE GO COM1;
UPPDAT;
QUNFIN MARK;
UNMARK: H←QREAD;
IF EQU(H,"EDGES") THEN DISP[3]←0 ELSE
IF EQU(H,"VERTICES") THEN DISP[6]←0 ELSE
IF EQU(H,"LINES") THEN DISP[5]←0 ELSE GO COM1;
UPPDAT;
QUNFIN UNMARK;
PLOT: TELL("plotting");
LOOP(IA,1,14,1) BEGIN DISPS[IA]←DISP[IA]; DISP[IA]←0 END;
WHILE BRCHAR≠'12 DO DISP[NUMI]←1;
PLT←1;
UPPDAT;
PRECAL;
CALC;
LOOP(IA,1,14,1) DISP[IA]←DISPS[IA];
UPPDAT;
UNTELL;
PLT←0;
GO COMND;
_ more sub-command decoding - EDIT, KILL, PRINT;
EDIT: H←QREAD;
IF EQU(H,"PARAM") THEN SETPAR ELSE
IF EQU(H,"LINES") THEN
BEGIN
LINED;
IF WHERE=5∨WHERE=6 THEN
BEGIN
IF EQU(LIEXT,".TEM") THEN LISAVE;
NODIS←1;
GO BL3;
END;
END ELSE
IF EQU(H,"PROT") THEN
BEGIN
EDLIN←NUMI;
COM3: CREPRO;
IF WHERE≥18 THEN
BEGIN
NODIS←1;
IF EQU(LIEXT,".TEM") THEN LISAVE;
IF EQU(EDEXT,".TEM") THEN EDSAVE;
IF EQU(PREXT,".TEM") THEN PRSAVE;
TELL("prot-expand");
GO BL1;
END;
IF WHERE=16 THEN
BEGIN
NODIS←1;
IF EQU(LIEXT,".TEM") THEN LISAVE;
GO BL3;
END;
END ELSE
IF EQU(H,"COM") THEN COMST ELSE GO COM1;
QUNFIN EDIT;
KILL: H←QREAD;
IF EQU(H,"FRAME") THEN DISP[1]←0 ELSE
IF EQU(H,"EDGES") THEN BEGIN DISP[2]←DISP[3]←0 END ELSE
IF EQU(H,"LINES") THEN DISP[4]←DISP[5]←DISP[6]←0 ELSE GO COM1;
UPPDAT;
QUNFIN KILL;
PRINT: H←QREAD;
IF EQU(H,"REGREF") THEN REGREF(NUMI) ELSE
IF EQU(H,"EDGES") THEN EDGPRT ELSE GO COM1;
QUNFIN PRINT;
_ more sub-command decoding - SET;
SETT: H←QREAD;
IF EQU(H,"SCALE") THEN
BEGIN
ISCX←1./QRSET(DSCX);
ISCY←1./QRSET(DSCY);
TRANSUP;
END ELSE
IF EQU(H,"BRTSIZ") THEN
BEGIN
DBRSI[IB←NUMI]←'46 LOR (NUMI LSH
(IF IB≤2∨IB=4 THEN 11 ELSE 8));
DICH[IB]←1;
UPPDAT
END ELSE
IF EQU(H,"FULREC") THEN QSET(FULREC) ELSE
IF EQU(H,"LOC") THEN TYPLOC(QSET(LOCT),QSET(LOCB)) ELSE
IF EQU(H,"WHAT") THEN QSET(IWHAT) ELSE
IF EQU(H,"TRACE") THEN QSET(MTRACE) ELSE
IF EQU(H,"CVLIN") THEN BEGIN QSET(CVLIN);DICH[4]←1;UPPDAT END ELSE
IF EQU(H,"WIND") THEN QSET(WIND) ELSE
IF EQU(H,"LDATE") THEN QSET(LDATE) ELSE
IF EQU(H,"NAME") THEN
BEGIN
OUTSTR(" NAME = "&NAME&" ← ");
NAME←QREAD;
NOUT←NGRF←NLPT←"A"
END ELSE
IF EQU(H,"LNCRE") THEN
BEGIN
QSET(LNCRE1);
QSET(LNCRE2);
DICH[4]←DICH[5]←DICH[6]←1;
UPPDAT
END ELSE
IF EQU(H,"DISRPT") THEN BEGIN QSET(DRX);QSET(DRY);TRANSUP END ELSE
IF EQU(H,"INTRPT") THEN BEGIN QRSET(IRX); QRSET(IRY); TRANSUP END
ELSE GO COM1;
QUNFIN SETT;
_ more sub-command decoding - CALL;
CALL: H←QREAD;
CALL1: IF EQU(H,"LINFIT") THEN
BEGIN
INITIA;
IF WHERE=1 THEN TELL("line-fit");
WHERE←1;
IDUM←LINFIT;
IF IDUM THEN
BEGIN
WHERE←2;
TELL("expanding");
NOL ← NOV ← 0;
GO BL3
END ELSE BEGIN
DICH[4]←DICH[5]←DICH[6]←1;
UPPDAT;
UNTELL
END
END ELSE
IF EQU(H,"SORTED") THEN BEGIN SORTED; DICH[3]←1; UPPDAT END ELSE
IF EQU(H,"UNXREF") THEN BEGIN UNXREF;GO TO UPLIN; END ELSE
IF EQU(H,"FTEX") THEN FTEX ELSE
IF EQU(H,"PARSE") THEN
BEGIN
MAPTRC←MAPCONV(QREAD);
IF NOL>0.65*MAXNOL THEN
BEGIN
NOBAL←(1.6*NOL-MSAFA)/RMSAF+1;
TELL("expanding");
IF EQU(LIEXT,".TEM") THEN LISAVE;
NODIS←1;
WHERE←20;
GO BL3
END;
CPA: LIEXT←".TEM";
WHERE←1;
PARSE
END ELSE
IF EQU(H,"XREF") THEN
BEGIN XREFC(NUMI);
UPLIN: DICH[6]←1;
IF CVLIN THEN DICH[4]←1;
UPPDAT
END ELSE GO COM1;
QUNFIN CALL;
_ more sub-command decoding - SHOW, NO, SAVE;
SHOW: H←QREAD;
IF EQU(H,"INTRPT") THEN
OUTSTR(" ("&CVS(DISX(IRX))&","&CVS(DISY(IRY))&")"&CL) ELSE
IF EQU(H,"LNFEAT") THEN
BEGIN
IDUM←LNFEAT(NUMI);
OUTSTR(EXPL(IDUM,'430771430771,"{#≥#≤∧-∀-.≡#≥#≤∧-∀-.}")&
(QFTREV)&" ENTRY: "&CVS(FINDFT(IDUM))&CL)
END ELSE
IF EQU(H,"COFEAT") THEN
BEGIN
LOOP(IA,1,2,1)
BEGIN
IB←IDUM;
IDUM←NUMI;
IC←ID;
ID←FINDFT(LNFEAT(IDUM))*(FTREV=1)
END;
IDUM←COFEAT(IB,IDUM,IC,ID);
OUTSTR(EXPL(IDUM,'401437401437,"{*→@∀---≡*→@∀---}")&(QFTREV)&
" ENTRY: "&CVS(FINDFT(IDUM))&CL)
END ELSE
IF EQU(H,"CFEAT")∧(IDUM←NUMI+PLFTOT)≤PFTOT THEN
BEGIN
IDUM←BITS(PFPTR[IDUM],12,23);
WHILE IDUM DO
OUTSTR(CVS(IDUM)&" → L1: "&
CVS((IA←BITS(IDUM←CFEAT[IDUM],24,35))
LAND '3777)&
" "&CVS(IA LSH -11)&" L2: "&
CVS((IA←BITS(IDUM,12,23)) LAND '3777)&
" "&CVS(IA LSH -11)&" → "&
CVS(IDUM←IDUM LAND '7777)&CL)
END ELSE
IF EQU(H,"LFDIF") THEN
BEGIN
IA←LNFEAT(NUMI);
IB←-(FTREV=1);
IC←LNFEAT(NUMI);
ID←-(FTREV=1);
OUTSTR(EXPL(LFDIF(IA,IC,NUMI XOR IB,NUMI XOR ID),
'742105742105,"{-≥-#SEC≡-≥-#SEC}")&
" + "&EXPL(MODIF,'252525252525,"{-----------------}")&CL)
END ELSE
IF EQU(H,"FRAME") THEN DISP[1]←1 ELSE
IF EQU(H,"EDGES") THEN
BEGIN
IA←IAEDG;
IAEDG←NUMI;
DISP[2]←1;
IF IA≠IAEDG THEN DICH[2]←1
END ELSE
IF EQU(H,"LINES") THEN DISP[4]←1 ELSE GO COM1;
UPPDAT;
QUNFIN SHOW;
NO: H←QREAD;
IF EQU(H,"EDGES") THEN
BEGIN
EDEXT←".TEM";
IF EQU(LIEXT,".TEM") THEN LISAVE;
NOEPA←0;
DICH[2]←DICH[3]←1;
UPPDAT;
NODIS←1;
WHERE←3;
GO BL2
END ELSE
IF EQU(H,"LINES") THEN
BEGIN
LIEXT←".TEM";
NOBAL←NOL←0;
DICH[4]←DICH[5]←DICH[6]←1;
UPPDAT;
WHERE←7;
GO BL3
END ELSE GO COM1;
NO1: WHERE←1;
QUNFIN NO;
SAV: H←QREAD;
IF EQU(H,"EDGES") THEN BEGIN FILESP(2); EDSAVE END ELSE
IF EQU(H,"LINES") THEN BEGIN SHUFFL; FILESP(1); LISAVE END ELSE
IF EQU(H,"PROT") THEN BEGIN FILESP(3); PRSAVE END ELSE
IF EQU(H,"STRUCT") THEN OUTLINES ELSE GO COM1;
QUNFIN SAV;
_ end of sub-command decoding - INPUT;
INP: H←QREAD;
IF EQU(H,"EDGES") THEN
BEGIN
FILESP(2);
EDREST;
QERR;
IF WHERE=11 THEN
BEGIN
NOBAL←NOEPA*RDEP/8.;
TELL("edge-expand");
GO BL2
END;
END ELSE
IF EQU(H,"LINES") THEN
BEGIN
FILESP(1);
LIREST;
QERR;
DICH[4]←DICH[5]←DICH[6];
IF WHERE=8 THEN
BEGIN
TELL("line-expand");
GO BL3
END;
END ELSE
IF EQU(H,"PROT") THEN
BEGIN
FILESP(3);
PRREST;
QERR;
IF WHERE=17 THEN
BEGIN
TELL("prot-expand");
GO BL1
END
END ELSE GO COM1;
INP1: WHERE←1;
UPPDAT;
QUNFIN INP;
_ * * * * * THAT WAS THE END OF THE COMMAND-LOOP * * * * *;
END "BLOCK3";
END "BLOCK2";
END "BLOCK1";
END "BLOCK0";_ END OF GUNLOK ;